home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / artemis / artsrc1 / effect.c < prev    next >
C/C++ Source or Header  |  1994-06-01  |  2KB  |  95 lines

  1. /*
  2.     ARTemis (Graphic Editor for FM-TOWNS)
  3.     (c) MATSUUCHI Ryosuke 1992,1993
  4.  
  5.     effect.c
  6.     
  7.     画像にさまざまな特殊効果を加える処理
  8. */
  9.  
  10. #include <stdio.h>
  11.  
  12. #include "ge.h"
  13. #include "dispman.h"
  14. #include "imageman.h"
  15.  
  16. static void do_accent(x1,y1,x2,y2)
  17. int    x1,y1,x2,y2;
  18. {
  19.     int a,b;    // 変数a,b : アクセント処理のパラメータ(5ビット固定小数点)
  20.     a = 96;
  21.     b = (a-32)/2;
  22.     if (x1 > x2)    swap(x1,x2);
  23.     if (y1 > y2)    swap(y1,y2);
  24.     int x,y;
  25.     for (y=y1; y<=y2; y++) {
  26.         for (x=x1; x<=x2; x++) {
  27.             int c,rr,gg,bb,rrr,ggg,bbb;
  28.             c = EIMpoint(x,y);
  29.             bb = c & 31;  c >>= 5;
  30.             rr = c & 31;  c >>= 5;
  31.             gg = c & 31;
  32.             rrr = ( a*rr-b*gg-b*bb) >> 5;
  33.             ggg = (-b*rr+a*gg-b*bb) >> 5;
  34.             bbb = (-b*rr-b*gg+a*bb) >> 5;
  35.             if (rrr < 0)        rrr = 0;
  36.             else if (rrr > 31)    rrr = 31;
  37.             if (ggg < 0)        ggg = 0;
  38.             else if (ggg > 31)    ggg = 31;
  39.             if (bbb < 0)        bbb = 0;
  40.             else if (bbb > 31)    bbb = 31;
  41.             EIMpset(x,y,(ggg<<10)+(rrr<<5)+bbb,DrawNORMAL);
  42.         }
  43.     }
  44. }
  45.  
  46. void commandAccent()
  47. {
  48.     int step;
  49.     int x1,y1,x2,y2;
  50.     void drawcsr(int msx,int msy)
  51.     {
  52.         page_menu();
  53.         int tx,ty;
  54.         tx = DMimage_getx(msx);
  55.         ty = DMimage_gety(msy);
  56.         if (step==1) {
  57.             EIMboxline(x1,y1,tx,ty,white,DrawXOR);
  58.         }
  59.     }
  60.     step=0;
  61.     for(;;) {
  62.         int prex,prey;
  63.         DMdispcsr(ms.x,ms.y);
  64.         drawcsr((prex=ms.x),(prey=ms.y));
  65.         do {
  66.             ms_get(&ms);
  67.         } while (ms.dx==0 && ms.dy==0 && ms.btn1==OFF && ms.btn2==OFF && key_chk()==0);
  68.         DMerasecsr();
  69.         drawcsr(prex,prey);        // 消去
  70.         scrollForCsr(1,1);
  71.         if (ms.btn1==OFFON) {
  72.             if (step==0) {            // 始点指定
  73.                 step=1;
  74.                 x1=DMimage_getx(ms.x);
  75.                 y1=DMimage_gety(ms.y);
  76.             } else if (step==1) {        // 終点指定
  77.                 x2=DMimage_getx(ms.x);
  78.                 y2=DMimage_gety(ms.y);
  79.                 page_edit();
  80.                 do_accent(x1,y1,x2,y2);
  81.                 page_menu();
  82.                 step=0;
  83.             }
  84.         }
  85.         if (ms.btn2==OFFON) {
  86.             if (step==0)
  87.                 break;
  88.             else if (step==1)
  89.                 step=0;
  90.         }
  91.     }
  92. }
  93.  
  94. /* end of effect.c */
  95.